home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Simtel MSDOS 1995 January
/
Simtel - 10000 MSDOS Shareware Programs (Walnut Creek)(January 1995)(Disc 2).ISO
/
disc2
/
eel
/
curspos.e
< prev
next >
Wrap
Text File
|
1991-03-11
|
6KB
|
180 lines
/************************************************************************
* "Epsilon", "EEL" and "Lugaru" are trademarks of Lugaru Software, Ltd. *
* *
* Copyright (C) 1985, 1990 Lugaru Software Ltd. All rights reserved. *
* *
* Limited permission is hereby granted to reproduce and modify this *
* copyrighted material provided that the resulting code is used only in *
* conjunction with Lugaru products and that this notice is retained in *
* any such reproduction or modification. *
*************************************************************************
* The previous copyright and trademark notice applies to some of the *
* code herein. All other changes, enhancements and extension routines *
* *
* Copyright (C) 1989, 1990 by Jonas H. Hedberg. All rights reserved. *
* *
* These changes may be redistributed free allowed for any purpose *
* providing both the Lugaru and my copyrights remain intact. *
* I assume no liability for the use or inability to use *
* this software. Neither do I take responsibility for any damage *
* cased by this software extension. *
* This extension may NOT be redistributed for profit. *
*************************************************************************
* File.......: CURSPOS.E *
* Ver........: 1.04 *
* Date.......: 1990-08-14 *
* Epsilon ver: 5.0 *
* By.........: Jonas Hedberg *
* Title..: Software Engineer *
* Company: TEAMSTER AB *
* Address: P.O. Box 8321 *
* S-402 79 GTEBORG *
* Country: SWEDEN *
* Tel....: Int +46-31-22 22 65 (GMT + 1h) *
* Fax....: Int +46-31-22 75 46 *
* Description: Show's current row and column at right bottom of the *
* screen, undepending if the screen is 25, 43 or 50 rows. *
* The function check if the screen is in color *
* or mono mode, and it's use the echo-line color. *
* The function is controled by the variable: *
* show-cursor-position. When it's "1" the current row *
* and column appears on the screen, and if it's "0", *
* nothing happends. The cursor-position-mode command can *
* be used to toggle between showing and not. *
* Algorithm..: Remember where you were last time, start from there and *
* count your way forward or backword depending were you *
* move to. *
* Comments...: *
* Change log *
* Date | Ver | Change *
* ----------+-------+-------------------------------------------------- *
* 15-Aug-90 | 1.01 | Added the "bazurk" test. *
* 15-Aug-90 | 1.02 | Command cursor-position-mode. *
* 11-Sep-90 | 1.03 | Add som more "AI" to the function current_row(). *
* 27-Sep-90 | 1.04 | Check the shortest way to count in current_row(). *
* | | *
* | | *
* | | *
************************************************************************/
#include "eel.h"
#include "lowlevel.h"
char show_cursor_position = 1;
buffer int _prev_point = 0;
buffer int _prev_row = 1;
command cursor_position_mode()
{
if (show_cursor_position == 0) {
show_cursor_position = 1;
} else {
show_cursor_position = 0;
}
}
do_show_cursor_position()
{
if (show_cursor_position == 1) {
char cursor_position[25];
sprintf(cursor_position, " r%d c%d ", current_row(), current_column() + 1);
/* Check if screen is mono or color */
if (screen_mode == 0 || screen_mode == 2 || screen_mode == 7)
/* The screen is in monochrom mode */
term_write(screen_cols-15, screen_lines-1,cursor_position,15,mcolors[1],1);
else
/* Screen is in color mode */
term_write(screen_cols-15, screen_lines-1,cursor_position,15,colors[1],1);
}
}
current_column()
{
int start, column;
start=point;
if (nl_reverse())
point++;
column = horizontal(start);
point = start;
return column;
}
current_row()
{
/* If current row has gone bazurk, fix it */
if ((_prev_point > size()) ||
(_prev_row <= 0) ||
((_prev_point == 0) && (_prev_row != 1))) {
int row = 1, start = point;
point = 0;
while (nl_forward() && !user_abort && (point <= start)) {
row++;
}
goto Ready;
} else {
int row = _prev_row, start = point;
/* Check if point is top of buffer */
if (point == 0) {
row = 1;
goto Ready;
}
point = _prev_point;
/* Check witch is the shortest way to count the current row */
if (point < (_prev_point - point)) {
point = 0;
while (nl_forward() && !user_abort && (point <= start)) {
row++;
}
goto Ready;
}
/* The move has been forward since last time */
if (start > _prev_point) {
while (nl_forward() && !user_abort && (point <= start)) {
row++;
}
/* Whe have moved backward in the buffer */
} else if (start < _prev_point) {
while (nl_reverse() && !user_abort && (point >= start)) {
row--;
}
}
Ready:
point = start;
check_abort();
if (!row)
row = row + 1;
/* Remember where we are */
_prev_point = point;
_prev_row = row;
return row;
}
}
new_curspos_getkey()
{
do_show_cursor_position(); /* Print row and col */
return curspos_getkey();
}
when_loading()
{
sayput("CURSOR POSITION-module Ver 1.04 (C) 1990 by Jonas Hedberg. Loading...");
/* Change Epsilon's getkey() */
if (!find_index("curspos_getkey"))
replace_name("getkey", "curspos_getkey");
else
drop_name("getkey");
replace_name("new_curspos_getkey", "getkey");
delay(300, COND_KEY);
}